iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Python

一些Python可以做的事系列 第 24

[Python] 檔案操作

  • 分享至 

  • xImage
  •  

這篇會介紹關於 PYTHON 的檔案處理

一、檔案的打開與關閉

在 Python 中,打開檔案的第一步是使用 open() 函數。

# 以讀取模式打開文本檔案
file = open('example.txt', 'r')
  • file : 要打開的檔案路徑。
  • mode : 定義檔案的打開模式,例如讀取、寫入等。常用模式包括:
    • 'r': 讀取模式。檔案必須存在。
    • 'w': 寫入模式。若檔案存在,將覆蓋原有內容;若檔案不存在,將創建新檔案。
    • 'a': 追加模式。在檔案末尾添加內容。若檔案不存在,將創建新檔案。
    • 'b': 二進制模式。用於讀寫二進制數據(例如圖片、音頻)。可以與其他模式結合使用,如 'rb''wb'
    • 't': 文本模式。這是讀取和寫入文本檔案的默認模式。

打開檔案後,務必使用 close() 方法來關閉檔案,釋放系統資源,避免檔案鎖定或記憶體洩漏。

# 關閉檔案
file.close()

打開模式

  • 讀取模式 'r':
    • 用於讀取現有檔案。
    • 若檔案不存在,則會引發 FileNotFoundError
      with open('example.txt', 'r') as file:
          content = file.read()
          print(content)
      
  • 寫入模式 'w':
    • 用於寫入資料到檔案。
    • 若檔案不存在,會自動創建新檔案。
    • 若檔案已存在,會清空檔案內容,重新寫入。
      with open('example.txt', 'w') as file:
          file.write("這是新的內容,將覆蓋舊內容。\n")
      
  • 追加模式 'a':
    • 用於在現有檔案的末尾追加資料。
    • 若檔案不存在,會創建新檔案。
      with open('example.txt', 'a') as file:
          file.write("這是追加的內容,不會覆蓋舊內容。\n")
      
  • 二進制模式 'b':
    • 用於讀寫二進制資料,如圖片、音頻。
    • 可以與其他模式結合,如 'rb' 讀取二進制檔案,或 'wb' 寫入二進制檔案。
      # 以二進制讀取模式打開圖片
      with open('image.png', 'rb') as file:
          data = file.read()
      
      # 以二進制寫入模式保存圖片
      with open('copy_image.png', 'wb') as file:
          file.write(data)
      

使用 with 陳述式

為了確保檔案在使用後能正確關閉,建議使用 with 陳述式。這樣可以自動處理檔案的開啟與關閉,避免忘記關閉檔案所引起的問題。with 陳述式的範例如下:

with open('example.txt', 'r') as file:
    content = file.read()
    # 在這個區塊中進行檔案操作,無需手動關閉檔案

# 檔案在離開區塊後自動關閉

二、檔案的讀取

Python 提供了多種方法來讀取檔案內容,根據需求可以選擇適當的方法:

  • read(size=-1):讀取整個檔案或指定大小的資料。
  • readline(size=-1):逐行讀取檔案內容,或讀取指定大小的資料直到遇到行結束符。
  • readlines(hint=-1):將檔案內容讀取為列表,每行作為列表中的一個元素。

read() 方法

read() 方法用於一次性讀取檔案的全部內容,適合用於處理小型文本檔案。

# 讀取整個檔案的內容
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

您也可以指定 read() 的參數來控制讀取的字節數:

# 讀取檔案的前 100 個字元
with open('example.txt', 'r') as file:
    content = file.read(100)
    print(content)

readline() 方法

readline() 用於逐行讀取檔案內容,適合用於逐步解析大文件或逐行處理檔案數據。

# 逐行讀取檔案的內容
with open('example.txt', 'r') as file:
    line = file.readline()
    while line:
        print(line, end='')  # `end=''` 是為了避免重複換行
        line = file.readline()

readlines() 方法

readlines() 方法將檔案的每一行讀取為列表中的一個元素,適合用於一次讀取多行內容並以列表形式處理。

# 將檔案內容讀取為列表
with open('example.txt', 'r') as file:
    lines = file.readlines()
    print(lines)

使用 readlines() 方便將文件內容作為列表進行遍歷或批量處理。例如,去除行末的換行符號:

with open('example.txt', 'r') as file:
    lines = [line.strip() for line in file.readlines()]
    print(lines)

三、檔案的寫入

write() 方法

write() 方法將字串寫入到檔案中,若檔案已存在,會根據打開模式覆蓋或追加內容。

# 以寫入模式打開檔案,並寫入數據
with open('example.txt', 'w') as file:
    file.write("這是寫入的內容。\n")
    file.write("這是另一行寫入的內容。\n")

writelines() 方法

writelines() 方法用於將列表中的每個元素作為一行寫入檔案。這個方法不會自動添加換行符,必須手動在每個元素後添加 \n

# 將列表中的內容逐行寫入檔案
lines = ["第一行\n", "第二行\n", "第三行\n"]

with open('example.txt', 'w') as file:
    file.writelines(lines)
``

`

如果列表中的元素不包含換行符,可以使用 `join()` 函數來手動添加:

```python
lines = ["第一行", "第二行", "第三行"]

with open('example.txt', 'w') as file:
    file.write('\n'.join(lines))

四、路徑管理與操作

當前工作目錄與絕對路徑

  • os.getcwd(): 返回當前工作的目錄路徑(當前執行的目錄)。

    import os
    current_directory = os.getcwd()
    print("當前工作目錄:", current_directory)
    
  • os.path.abspath(path): 將給定的路徑轉換為絕對路徑。

    file_path = "example.txt"
    absolute_path = os.path.abspath(file_path)
    print("絕對路徑:", absolute_path)
    

路徑組合與拆分

  • os.path.join(): 將多個路徑組件組合成一個路徑。這種方法會自動處理不同作業系統的路徑分隔符號(如 Windows 的 \ 和 Unix 的 /)。

    full_path = os.path.join("folder", "subfolder", "file.txt")
    print("合併路徑:", full_path)
    
  • os.path.basename(): 返回路徑中的文件名部分。

    path = "/home/user/documents/file.txt"
    filename = os.path.basename(path)
    print("文件名:", filename)
    
  • os.path.dirname(): 返回路徑中的目錄部分。

    directory = os.path.dirname(path)
    print("目錄:", directory)
    
  • os.path.splitext(): 將文件名和擴展名分離,返回一個包含兩個元素的元組。

    filename = "example.txt"
    name, extension = os.path.splitext(filename)
    print("文件名:", name)
    print("擴展名:", extension)
    

路徑檢查與文件操作

  • os.path.exists(): 檢查路徑或文件是否存在,返回 TrueFalse

    path = "example.txt"
    if os.path.exists(path):
        print("檔案存在")
    else:
        print("檔案不存在")
    
  • os.path.isfile(): 檢查路徑是否指向一個文件。

    if os.path.isfile(path):
        print("這是個文件")
    
  • os.path.isdir(): 檢查路徑是否指向一個目錄。

    if os.path.isdir(path):
        print("這是一個目錄")
    

操作目錄與文件

  • os.mkdir(): 創建一個目錄。

    os.mkdir("new_folder")
    
  • os.makedirs(): 創建多層目錄。

    os.makedirs("new_folder/subfolder")
    
  • os.remove(): 刪除一個文件。

    os.remove("file.txt")
    
  • os.rmdir(): 刪除一個目錄。注意,該目錄必須是空的。

    os.rmdir("empty_folder")
    
  • os.removedirs(): 刪除多層目錄。

    os.removedirs("folder/subfolder")
    

參考資料 :
https://utrustcorp.com/python-file-read-wirte/
https://medium.com/ccclub/ccclub-python-for-beginners-tutorial-bf0648108581


上一篇
[Python] 電腦攝像頭錄影
下一篇
[Python] 螢幕錄影
系列文
一些Python可以做的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言